package py.progweb.sgc.manager.impl;

import java.util.Iterator;

import javax.annotation.security.PermitAll;
import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;

import py.progweb.sgc.manager.ABMManagerLocal;
import py.progweb.sgc.manager.ComprasFacadeLocal;
import py.progweb.sgc.manager.exceptions.ServiceException;
import py.progweb.sgc.model.Compra;
import py.progweb.sgc.model.CompraDetalle;

@Stateless(name = "ComprasFacade")
@TransactionManagement(TransactionManagementType.CONTAINER)
public class ComprasFacadeImpl implements ComprasFacadeLocal {
	@EJB
	private ABMManagerLocal comprasEAO;

	@PermitAll
	@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
	public void guardarCompra(Compra compra) throws ServiceException {
		try {
			comprasEAO.guardar(compra);
			Iterator<CompraDetalle> iterator = compra.getCompraDetalles()
					.iterator();
			while (iterator.hasNext()) {
				CompraDetalle detalle = iterator.next();
				detalle.getProducto().setPrecio_actual(
						(detalle.getProducto().getPrecio_actual()
								* detalle.getProducto().getStock() + detalle
								.getPrecioCompra() * detalle.getCantidad())
								/ (detalle.getProducto().getStock() + detalle
										.getCantidad()));
				detalle.getProducto().setStock(
						detalle.getProducto().getStock()
								+ detalle.getCantidad());
				comprasEAO.guardar(detalle.getProducto());
				comprasEAO.guardar(detalle);
			}
		} catch (Exception e) {
			throw new ServiceException(e);
		}

	}
}
